/**
* @projectName   cvvinfrastructure
* @file          AESAlgorithm.h
* @brief         AES加解密算法类
* @author        GuoFeng
* @contact        805305774@qq.com/feng.guo@micro-i.com.cn
* @date          2023-11-30 11:31:55
*/

#ifndef AESALGORITHM_H
#define AESALGORITHM_H

#include "Utils_Global.h"
#include <string>

namespace CVV {
namespace Infrastructure {
namespace Utils {

class QTCREATOR_UTILS_EXPORT AESAlgorithm
{
public:
    static AESAlgorithm* getInstance();

    /**
     * @brief cbcEncrypt cbc模式加密
     * @param plaintext 待加密明文
     * @param key 加密密钥和解密密钥相同，必须是16位字符
     * @return 成功返回加密字符串，失败返回空串
     */
    std::string cbcEncrypt(const std::string &plaintext, const std::string &key);

    /**
     * @brief cbcDecrypt cbc模式解密
     * @param ciphertext 待解密密文
     * @param key 解密密钥和加密密钥相同，必须是16位字符
     * @return 成功返回解密字符串，失败返回空串
     */
    std::string cbcDecrypt(const std::string &ciphertext, const std::string &key);

private:
    explicit AESAlgorithm();
    virtual ~AESAlgorithm();
};

}
}
}

#ifndef gAESAlgorithm
#define gAESAlgorithm CVV::Infrastructure::Utils::AESAlgorithm::getInstance()
#endif

#endif // AESALGORITHM_H
